package com.zkh.myutils.io.excel.worksheet;

import com.zkh.myutils.io.excel.worksheet.style.Align;
import com.zkh.myutils.io.excel.worksheet.style.Alignment;
import com.zkh.myutils.io.excel.worksheet.style.Border;
import com.zkh.myutils.io.excel.worksheet.style.Font;
import com.zkh.myutils.utils.Assert;

/**
 * 单元格样式
 * @author zkh
 */
public class CellStyle {
	//字体
	private Font font;
	//背景色
	private String backgroundColor;
	//边框
	private Border border;
	//对齐方式
	private Alignment alignment;

	/**
	 * 设置背景色
	 * @param backgroundColor 背景色
	 */
	public void setBackgroundColor(String backgroundColor) {
		this.backgroundColor = backgroundColor;
	}
	/**
	 * 设置字体样式
	 * @param font 字体对象
	 */
	public void setFont(Font font) {
		this.font = font;
	}
	/**
	 * 设置边框
	 * @param border 边框对象 
	 */
	public void setBorder(Border border) {
		this.border = border;
	}
	/**
	 * 获取字体样式
	 */
	public Font getFont() {
		return font;
	}
	/**
	 * 获取边框
	 */
	public Border getBorder() {
		return border;
	}
	/**
	 * 获取背景颜色
	 */
	public String getBackgroundColor() {
		return backgroundColor;
	}
	
	/**
	 * 获取对齐方式
	 */
	public Alignment getAlignment() {
		return alignment;
	}
	/**
	 * 设置对齐方式
	 */
	public void setAlignment(Alignment alignment) {
		this.alignment = alignment;
	}
	/**
	 * 设置垂直对齐方式
	 * @param align 对齐方式，取Align.VERTICAL_开头的枚举项或直接取消Align.CANCLE
	 */
	public void setVerticalAlignment(Align align) {
		this.alignment = new Alignment();
		this.alignment.setVertical(align);
	}
	/**
	 * 设置水平对齐方式
	 * @param align 对齐方式，取Align.HORIZONTAL_开头的枚举项或直接取消Align.CANCLE
	 */
	public void setHorizontalAlignment(Align align) {
		this.alignment = new Alignment();
		this.alignment.setHorizontal(align);
	}
	/**
	 * 样式为空
	 */
	public boolean isEmpty(){
		return font==null && backgroundColor==null
				&& (border==null || border.isEmpty()) && (alignment==null || alignment.isEmpty());
	}
	
	/**
	 * 克隆对象
	 */
	public CellStyle clone() {
		//创建新对象
		CellStyle cellStyle = new CellStyle();
		//复制值
		cellStyle.setBackgroundColor(backgroundColor);
		Assert.doIfNotNull(font, ft->cellStyle.setFont(ft.clone()));
		Assert.doIfNotNull(alignment, ag->cellStyle.setAlignment(ag.clone()));
		Assert.doIfNotNull(border, bd->cellStyle.setBorder(bd.clone()));
		//返回对象
		return cellStyle;
	}
}
